package com.ohs.ohsoa.system.controller;

import java.util.List;

import javax.annotation.Resource;
import javax.validation.Valid;

import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.github.pagehelper.PageInfo;
import com.ohs.ohsoa.system.dto.NoticeDto;
import com.ohs.ohsoa.system.service.NoticeService;
import com.ohs.ohsoa.system.vo.NoticeVo;
import com.ohs.ohsoa.utils.auth.UserLoginToken;
import com.ohs.ohsoa.utils.bean.requestBean.PageParam;
import com.ohs.ohsoa.utils.bean.responseBean.ResultBean;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
 * 公告信息controller
 *
 * @author ccj
 * @since 2021年9月24日
 */

@Api(value = "信息公告", tags = "信息公告")
@RestController
@RequestMapping("/notice")
public class NoticeController {

    @Resource
    private NoticeService service;

    /**
     * 分页查询
     *
     * @author ccj
     * @since 2021年9月24日
     * @param pageParam ’实例对象‘
     * @return 实例对象
     */
    @UserLoginToken
    @PostMapping(value = "/listNotice")
    @ApiOperation(httpMethod = "POST", value = "分页查询公告")
    public ResultBean<PageInfo<NoticeVo>> listNotice(@RequestBody PageParam<NoticeDto> pageParam) {
        List<NoticeVo>res = service.listNotice(pageParam);
        return ResultBean.success(new PageInfo<>(res));
    }

    /**
     * 新增
     *
     * @author ccj
     * @since 2021年9月24日
     * @param noticeDto ’实例对象‘
     * @return 1为成功
     */
    @UserLoginToken
    @PostMapping(value = "/insert")
    @ApiOperation(httpMethod = "POST", value = "新增公告信息")
    public ResultBean<Boolean> insert(@RequestBody @Valid NoticeDto noticeDto, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return ResultBean.fail(bindingResult.getAllErrors().get(0).getDefaultMessage());
        }
        return ResultBean.success(service.noticeInsert(noticeDto));
    }

    /**
     * 修改
     *
     * @author ccj
     * @since 2021年9月24日
     * @param noticeDto ’实例对象‘
     * @return 1为成功
     */
    @UserLoginToken
    @PutMapping(value = "/update")
    @ApiOperation(httpMethod = "PUT", value = "修改公告信息")
    public ResultBean<Boolean> update(@RequestBody @Valid NoticeDto noticeDto, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return ResultBean.fail(bindingResult.getAllErrors().get(0).getDefaultMessage());
        }
        return ResultBean.success(service.noticeUpdate(noticeDto));
    }

    /**
     * 删除by no_id
     *
     * @author ccj
     * @since 2021年9月24日
     * @param noticeDto 实例对象
     * @return 1为成功
     */
    @UserLoginToken
    @DeleteMapping(value = "/delete")
    @ApiOperation(httpMethod = "DELETE", value = "根据公告编号删除")
    public ResultBean<Boolean> delete(@RequestBody NoticeDto noticeDto) {
        List<String> ids = noticeDto.getNoId();
        return ResultBean.success(service.noticeDelete(ids));
    }
}
